package com.atguigu.gmall.util;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

/**
 * @author : 熊亚东
 * @description :
 * @date : 2019/7/17 | 8:16
 **/
public class CookieUtil {

    public static String getCookieValue(HttpServletRequest request , String cookieName , boolean isDecoder){

        Cookie[] cookies = request.getCookies();
        if (cookies==null||cookieName==null){
            return null;
        }
        String retValue = null;
        try{
            for (int i=0 ; i<cookies.length ; i++){
                if (cookies[i].getName().equals(cookieName)){
                    if (isDecoder){//如果涉及中文
                        retValue = URLDecoder.decode(cookies[i].getValue(), "UTF-8");
                    }else{
                        retValue = cookies[i].getValue();
                    }
                    break;
                }
            }
        }catch (UnsupportedEncodingException e){
            e.printStackTrace();
        }
        return retValue;
    }

    public static void setCookie(HttpServletRequest request , HttpServletResponse response , String cookieName , String cookieValue , int cookieMaxage , boolean isEncode){
        try{
            if (cookieValue == null){
                cookieValue = "";
            }else if (isEncode){
                cookieValue = URLEncoder.encode(cookieValue,"utf-8");
            }
            Cookie cookie = new Cookie(cookieName, cookieValue);
            if (cookieMaxage>=0){
                cookie.setMaxAge(cookieMaxage);
            }
            if (null != request){//设置域名的cookie
                cookie.setDomain(getDomainName(request));
            }
            cookie.setPath("/");
            response.addCookie(cookie);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    private static final String getDomainName(HttpServletRequest request){
        String domainName = null;
        String serverName = request.getRequestURL().toString();
        if (serverName == null||serverName.equals("")){
            domainName="";
        }else {
            serverName = serverName.toLowerCase();
            serverName = serverName.substring(7);
            final int end = serverName.indexOf("/");
            serverName = serverName.substring(0,end);
            final String[] domains = serverName.split("\\.");
            int len = domains.length;
            if (len>3){
                domainName = domains[len - 3]+"."+domains[len - 2]+"."+domains[len - 1];
            }else if (len <= 3&&len > 1){
                domainName = domains[len - 2]+"."+domains[len - 1];
            }else {
                domainName = serverName;
            }
        }
        if (domainName != null&&domainName.indexOf(":")>0){
            String[] ary = domainName.split("\\:");
            domainName = ary[0];
        }
        System.out.println("domainName="+domainName);
        return domainName;
    }

    public static void deleteCookie(HttpServletRequest request , HttpServletResponse response , String cookieName){
        setCookie(request , response , cookieName , null , 0 , false);
    }

}
